package com.ruoyi.system.service.impl;

import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.ruoyi.system.mapper.TaskDataRelMapper;
import com.ruoyi.system.domain.TaskDataRel;
import com.ruoyi.system.domain.VideoData;
import com.ruoyi.system.service.ITaskDataRelService;
import com.ruoyi.system.service.IVideoDataService;
import com.ruoyi.common.core.text.Convert;

/**
 * 任务数据关联Service业务层处理
 * 
 * @author wsx
 * @date 2025-07-30
 */
@Service
public class TaskDataRelServiceImpl implements ITaskDataRelService 
{
    @Autowired
    private TaskDataRelMapper taskDataRelMapper;

    @Autowired
    private IVideoDataService videoDataService;

    /**
     * 查询任务数据关联
     * 
     * @param id 任务数据关联主键
     * @return 任务数据关联
     */
    @Override
    public TaskDataRel selectTaskDataRelById(Long id)
    {
        return taskDataRelMapper.selectTaskDataRelById(id);
    }

    /**
     * 查询任务数据关联列表
     * 
     * @param taskDataRel 任务数据关联
     * @return 任务数据关联
     */
    @Override
    public List<TaskDataRel> selectTaskDataRelList(TaskDataRel taskDataRel)
    {
        return taskDataRelMapper.selectTaskDataRelList(taskDataRel);
    }

    /**
     * 新增任务数据关联
     * 
     * @param taskDataRel 任务数据关联
     * @return 结果
     */
    @Override
    public int insertTaskDataRel(TaskDataRel taskDataRel)
    {
        taskDataRel.setCreateTime(DateUtils.getNowDate());
        return taskDataRelMapper.insertTaskDataRel(taskDataRel);
    }

    /**
     * 修改任务数据关联
     * 
     * @param taskDataRel 任务数据关联
     * @return 结果
     */
    @Override
    public int updateTaskDataRel(TaskDataRel taskDataRel)
    {
        return taskDataRelMapper.updateTaskDataRel(taskDataRel);
    }

    /**
     * 批量删除任务数据关联
     * 
     * @param ids 需要删除的任务数据关联主键
     * @return 结果
     */
    @Override
    public int deleteTaskDataRelByIds(String ids)
    {
        return taskDataRelMapper.deleteTaskDataRelByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除任务数据关联信息
     * 
     * @param id 任务数据关联主键
     * @return 结果
     */
    @Override
    public int deleteTaskDataRelById(Long id)
    {
        return taskDataRelMapper.deleteTaskDataRelById(id);
    }

    /**
     * 保存关联
     * 
     * @param taskId  任务主键
     * @param dataIds 数据主键集合
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveTaskDataRel(Long taskId, String dataIds) {
        // 保存新关联
        String[] dataIdArray = dataIds.split(",");
        for (String dataId : dataIdArray) {
            TaskDataRel taskDataRel = taskDataRelMapper.selectTaskDataRelByDataId(Long.parseLong(dataId));
            if (taskDataRel != null) {
                taskDataRel.setTaskId(taskId);
                taskDataRelMapper.updateTaskDataRel(taskDataRel);
            } else {
                TaskDataRel addDataRel = new TaskDataRel();
                addDataRel.setTaskId(taskId);
                addDataRel.setDataId(Long.parseLong(dataId));
                taskDataRelMapper.insertTaskDataRel(addDataRel);
            }
            VideoData videoData = videoDataService.selectVideoDataByDataId(Long.parseLong(dataId));
            if (videoData != null) {
                videoData.setIsArchived("1");
                videoDataService.updateVideoData(videoData);
            }
        }
    }

    /**
     * 根据任务主键查询数据主键集合
     * 
     * @param taskId 任务主键
     * @return 数据主键集合
     */
    @Override
    public String selectTaskDataIdsByTaskId(Long taskId) {
        return String.join(",",
                taskDataRelMapper.selectTaskDataIdsByTaskId(taskId).stream().map(String::valueOf)
                        .toArray(String[]::new));
    }

    /**
     * 根据数据主键查询任务主键
     * 
     * @param dataId 数据主键
     * @return 任务主键
     */
    @Override
    public Long selectTaskIdByDataId(Long dataId) {
        return taskDataRelMapper.selectTaskIdByDataId(dataId);
    }

    /**
     * 根据任务主键删除任务数据关联信息
     * 
     * @param taskId 任务主键
     * @return 结果
     */
    @Override
    public int deleteTaskDataRelByTaskId(Long taskId) {
        return taskDataRelMapper.deleteTaskDataRelByTaskId(taskId);
    }

    /**
     * 根据数据主键删除任务数据关联信息
     * 
     * @param dataId 数据主键
     * @return 结果
     */
    @Override
    public int deleteTaskDataRelByDataId(Long dataId) {
        return taskDataRelMapper.deleteTaskDataRelByDataId(dataId);
    }
}
